LISP | 您所在的位置:网站首页 › lisp open › LISP |
WIKI教程
学习LISP
LISP - 输入和输出(Input & Output)
LISP - 输入和输出(Input & Output)
通用LISP提供多种输入输出功能。 我们已经使用了格式化功能,并输出了打印功能。 在本节中,我们将研究LISP中提供的一些最常用的输入输出函数。 输入功能 (Input Functions)下表提供了LISP最常用的输入功能 - Sr.No. 功能说明 1read和可选input-stream eof-error-p eof-value recursive-p 它从输入流中读取Lisp对象的打印表示,构建相应的Lisp对象,并返回该对象。 2read-preserving-whitespace &optional in-stream eof-error-p eof-value recursive-p 它用于某些特殊情况,在这些情况下,需要准确确定哪个字符终止了扩展令牌。 3read-line &optional input-stream eof-error-p eof-value recursive-p 它读入由换行符终止的一行文本。 4read-char &optional input-stream eof-error-p eof-value recursive-p 它从输入流中获取一个字符并将其作为字符对象返回。 5unread-char character & optional input-stream 它将最近从输入流中读取的字符放在输入流的前面。 6peek-char &optional peek-type input-stream eof-error-p eof-value recursive-p 它返回从输入流中读取的下一个字符,而不实际从输入流中删除它。 7listen和可选的input-stream 如果存在从输入流中立即可用的字符,则谓词listen为真,否则为假。 8read-char-no-hang &optional input-stream eof-error-p eof-value recursive-p 它类似于read-char ,但如果它没有得到一个字符,它不会等待一个字符,但会立即返回nil。 9clear-input和可选input-stream 它清除与input-stream.关联的任何缓冲输入input-stream. 10read-from-string string &optional eof-error-p eof-value & key :start :end :preserve-whitespace 它连续获取字符串的字符并构建一个LISP对象并返回该对象。 它还返回字符串中未读取的第一个字符的索引,或字符串的长度(或长度+1),视情况而定。 11parse-integer string & key :start :end :radix :junk-allowed 它检查由以下内容分隔的字符串的子字符串:start和:end(默认为字符串的开头和结尾)。 它会跳过空白字符,然后尝试解析整数。 12read-byte binary-input-stream和可选的eof-error-p eof-value 它从二进制输入流中读取一个字节,并以整数形式返回。 从键盘读取输入read功能用于从键盘输入。 它可能不会有任何争论。 例如,考虑代码段 - (write ( + 15.0 (read)))假设用户从STDIN输入输入10.2,它返回, 25.2read函数从输入流中读取字符,并通过解析为Lisp对象的表示来解释它们。 例子 (Example)创建一个名为main.lisp的新源代码文件,并在其中键入以下代码 - ; the function AreaOfCircle ; calculates area of a circle ; when the radius is input from keyboard (defun AreaOfCircle() (terpri) (princ "Enter Radius: ") (setq radius (read)) (setq area (* 3.1416 radius radius)) (princ "Area: ") (write area)) (AreaOfCircle)执行代码时,它返回以下结果 - Enter Radius: 5 (STDIN Input) Area: 78.53999 例子 (Example)创建一个名为main.lisp的新源代码文件,并在其中键入以下代码。 (with-input-from-string (stream "Welcome to IOWIKI!") (print (read-char stream)) (print (read-char stream)) (print (read-char stream)) (print (read-char stream)) (print (read-char stream)) (print (read-char stream)) (print (read-char stream)) (print (read-char stream)) (print (read-char stream)) (print (read-char stream)) (print (peek-char nil stream nil 'the-end)) (values) )执行代码时,它返回以下结果 - #\W #\e #\l #\c #\o #\m #\e #\Space #\t #\o #\Space 输出函数 (The Output Functions)LISP中的所有输出函数都使用一个名为output-stream,的可选参数output-stream,其中输出被发送。 如果未提及或为nil,输出流默认为变量* standard-output *的值。 下表提供了LISP最常用的输出功能 - Sr.No. 功能和描述 1write object &key:stream:escape:radix:base:circle:pretty:level:length:case:gensym:array write object &key:stream:escape:radix:base:circle:pretty:level:length:case:gensym:array:readably:right-margin:miser-width:lines:pprint-dispatch 两者都将对象写入由以下指定的输出流:stream,默认为* standard-output *的值。 其他值默认为为打印设置的相应全局变量。 2prin1 object和可选的output-stream print object和可选的output-stream pprint object和可选的output-stream princ object和可选的output-stream 所有这些函数都将对象的打印表示output-stream到output-stream 。 但是,存在以下差异 - prin1返回对象作为其值。 print使用前一个换行符打印对象,后跟一个空格。 它返回对象。 pprint就像print一样,只是省略了尾随空格。 princ就像prin1,但输出没有转义字符 3write-to-string object & key :escape:radix:base:circle:pretty:level:length:case:gensym:array write-to-string object &key:escape:radix:base:circle:pretty:level:length:case:gensym:array:readably:right-margin:miser-width:lines:pprint-dispatch prin1-to-string object princ-to-string object 有效地打印对象,并将输出字符转换为字符串,并返回该字符串。 4write-char character和可选的output-stream 它将字符output-stream,到output-stream,并返回字符。 5write-string string &optional output-stream &key:start:end 它将string的指定子string的字符写入output-stream. 6write-line string &optional output-stream &key:start:end 它的工作方式与write-string相同,但之后会输出换行符。 7terpri和可选的output-stream 它为output-stream.输出换行符output-stream. 8fresh-line和可选output-stream 仅当流不在行的开头时才输出换行符。 9finish-output和可选output-stream force-output和可选output-stream clear-output和可选output-stream 函数finish-output尝试确保发送到output-stream的所有输出都已到达其目标,然后才返回nil。 函数force-output启动任何内部缓冲区的清空,但返回nil而不等待完成或确认。 函数clear-output尝试中止正在进行的任何未完成的输出操作,以便允许尽可能少的输出继续到目标。 10write-byte integer binary-output-stream 它写入一个字节,即integer.的值integer. 例子 (Example)创建一个名为main.lisp的新源代码文件,并在其中键入以下代码。 ; this program inputs a numbers and doubles it (defun DoubleNumber() (terpri) (princ "Enter Number : ") (setq n1 (read)) (setq doubled (* 2.0 n1)) (princ "The Number: ") (write n1) (terpri) (princ "The Number Doubled: ") (write doubled) ) (DoubleNumber)执行代码时,它返回以下结果 - Enter Number : 3456.78 (STDIN Input) The Number: 3456.78 The Number Doubled: 6913.56 格式化输出函数format用于生成格式良好的文本。 它具有以下语法 - format destination control-string &rest argumentsWhere, 目的地是标准输出 control-string保存要输出的字符和打印指令。format directive由波浪号(〜),用逗号分隔的可选前缀参数,可选冒号(:)和at符号(@)修饰符以及指示这是什么类型的指令的单个字符组成。 前缀参数通常是整数,标记为可选的带符号十进制数。 下表提供了常用指令的简要说明 - Sr.No. 指令和说明 1~A 后跟ASCII参数。 2~S 接下来是S表达式。 3~D 对于十进制参数。 4~B 对于二进制参数。 5~O 对于八进制参数。 6~X 对于十六进制参数。 7~C 对于角色论点。 8~F 对于固定格式的浮点参数。 9~E 指数浮点参数。 10~$ 美元和浮点论证。 11~% 打印一个新行。 12~* 下一个参数被忽略。 13~? 间接。 下一个参数必须是一个字符串,后面的一个是列表。 例子 (Example)让我们重写计算圆圈区域的程序 - 创建一个名为main.lisp的新源代码文件,并在其中键入以下代码。 (defun AreaOfCircle() (terpri) (princ "Enter Radius: ") (setq radius (read)) (setq area (* 3.1416 radius radius)) (format t "Radius: = ~F~% Area = ~F" radius area) ) (AreaOfCircle)执行代码时,它返回以下结果 - Enter Radius: 10.234 (STDIN Input) Radius: = 10.234 Area = 329.03473 LISP - 哈希表(Hash Table) LISP - File I/O.下一篇> |
CopyRight 2018-2019 实验室设备网 版权所有 |